/*%macro prnt(program=, disname=, ds_list=, where= , tableno= );*/
%macro print_listings(program=, disname=, idisname=, ds_list=, where=, bn=, ttt=, ftnote=, emp=);

%get_data(pre=adam,lib=adam,supp=n,lst=adlb);

data _adamadlb(keep=subjid usubjid parcat1 parcat1n param paramcd paramn avalc aval chg ANRLO ANRHI anrange LBCLSIG anrind ablfl ANL01FL adtm adt avisit avisitn visityp);
length subjid $10.; 
set adamadlb;
subjid = strip(substr(usubjid,13)); 
run;

data lb;
length chgc adtc /*mydatec   range*/ $20. lbdtc $16.;
  set _adamadlb;
/*    where LBCLSIG in ("NCS" "TBC") and index(avisit,"Scr")=0 and  index(avisit,"Post")=0 and index(avisit,"End")=0 and index(avisit,"P1 Day -1")=0;*/
/*  where &where and index(avisit,"Scr")=0 and  index(avisit,"Post")=0 and index(avisit,"End")=0 and index(avisit,"P1 Day -1")=0;*/
    where &where and index(avisit,"Scr")=0 and index(avisit,"Day -1")=0;
   chgc = strip(put(chg,best.)); 
   ADTC = put(ADTM, is8601dt.);
  if adtc ne " " then lbdtc=tranwrd(adtc,"T","/");
   
  param = "  " || strip(param);
/*  %concat_var_listc(var_res=paramc,varlist=parcat1 param, delimiter=%str(/    \par \li200 ),length_var_Res=$200., test_empty=No,deleteIfEmpty=Yes);*/
param = tranwrd(param, "10^3", "10^{super 3}");
param = tranwrd(param, "10^6", "10^{super 6}");
param = tranwrd(param, "10^9", "10^{super 9}");
param = tranwrd(param, "10^12", "10^{super 12}");
param = tranwrd(param, "-"||trim(parcat1), "");
avisit=tranwrd(avisit,"Screening Day -21 to -2","Screening");
avisit=tranwrd(avisit,"End of Study or Early Termination","EOS/ET");
/*   anrind = strip(substr(anrind,1, 1));*/
/*if ANRLO and ANRHI ne . then do;*/
/*range=strip(put(ANRLO,best.))||" - "||strip(put(ANRHI,best.));*/
/*end;*/
run;

proc sort data=lb; 
by parcat1n parcat1 param subjid anrange avisitn avisit visityp adtm lbdtc avalc anrind lbclsig; 
run;

/*data check;*/
/* set lb(keep=parcat1n parcat1 param range usubjid subjid adtm lbdtc avisitn avisit visityp avalc anrind lbclsig);*/
/* by parcat1n parcat1 param range subjid avisitn avisit visityp adtm lbdtc avalc anrind lbclsig;*/
/* blnk=1;*/
/* output;*/
/* if first.parcat1 then do;*/
/*  array allchar {*} param range subjid lbdtc avisit visityp avalc anrind lbclsig;*/
/*  drop i;*/
/*  do i=1 to dim(allchar); allchar{i}=' '; end;*/
/*  blnk=0;*/
/*  output; end;*/
/*run;*/
/**/
/*data check1;*/
/* set check;*/
/*  if param eq '' then param=parcat1;*/
/*run;*/
/**/
/*%page_cut(in=check1,sort=parcat1n parcat1 blnk param range subjid avisitn avisit visityp adtm lbdtc avalc anrind lbclsig,*/
/*          columns=, width=,  newpage=, nocut=parcat1,skip=param,pagesize=22,out=lb1);*/


%page_cut(in=lb,sort=parcat1n parcat1 param subjid anrange avisitn avisit visityp adtm lbdtc avalc anrind lbclsig,
          columns=, width=,  newpage=, nocut=parcat1,skip=param,pagesize=28,out=lb1);

data lb1; set lb1; page0=page; run;

proc sort data=lb1 out=lb2(keep=page page0 parcat1n parcat1 param  usubjid subjid anrange avisitn avisit visityp adtm lbdtc avalc chgc anrind lbclsig); 
by page page0 parcat1n parcat1 param  subjid anrange avisitn avisit visityp adtm lbdtc avalc chgc anrind lbclsig; 
run;

data addpar(keep=page page0 parcat1n parcat1 param rename=(param=param0));
set lb2;
by page page0 parcat1n parcat1 param  subjid anrange avisitn avisit visityp adtm lbdtc avalc anrind lbclsig; 
if first.parcat1 then output addpar;
run;

data lb3;
set lb2 addpar;
run;

data lb3; set lb3;
if param0=" " then do; param0=param; end; 
if param=" " then do; paramd=parcat1; end;
if paramd=" " then do; paramd=param; end;
run;

proc sort data=lb3; by page page0 parcat1n parcat1 param param0 paramd  subjid anrange avisitn avisit visityp adtm lbdtc avalc anrind lbclsig; run;

proc sql noprint;
 select count(*)
 into :doit
 from lb;
quit;

title3 " ";
title4 "Table &disname (Continued)";
%footer1(foot1=1, ds_list=&ds_list.,program=&program.);

filename filetmp temp;
filename filertf "\\algopharm.com\algorithmepharmadata\Biostudies\Montreal\&prot.\SRA\Biostatistics\Work\Outputs\tables\T&idisname._LB_&bn..rtf"; 

%empty_ds_fix(lb1);
%open_rtf;

title5 "&ttt On-Study Laboratory Values";
title6 "(Safety Population)";

footnote3 j=l "Note: Abnormal values are determined by applying the reference ranges to the results as reported by the external laboratory analysis.";
/*footnote4 j=l "[1] L: Lower than normal value                H: Higher than normal value                   A: Abnormal value";*/
/*footnote4 j=l "[1] NCS:  Not Clinically Significant   /   CS: Clinically Significant   /  TBC: To be controlled.";*/
footnote4 j=l "&ftnote";

proc report data=lb3 nowd split='~' missing;
 column page page0 parcat1n parcat1 param param0 paramd  usubjid subjid anrange avisitn avisit visityp adtm lbdtc avalc /*chgc*/ anrind lbclsig;
 define page       / " " order order=internal noprint;
 define page0      / " " order order=internal noprint;
 define parcat1n   / " " order order=internal noprint;
 define parcat1    / " " order order=internal noprint;;
 define param      / " " order order=internal noprint;
 define param0      / " " order order=internal noprint;

 define paramd     / "Category/~Parameter (Unit)" order order=internal style(column)=[cellwidth=2.5in just=left] style(header)=[just=left];
 define usubjid      / " " order order=internal noprint;
 define subjid     / "Subject~  ID" order order=internal style(column)=[cellwidth=0.6in just=left] style(header)=[just=l];
 define anrange      / "Reference~Range" order order=internal style(column)=[cellwidth=1in just=left] style(header)=[just=l];
define avisitn    / " " order order=internal noprint;
 define avisit     / "Visit" order order=internal style(column)=[cellwidth=1.35in just=left] style(header)=[just=left];
 define visityp      / " " order order=internal noprint;
 define adtm      / " " order order=internal noprint;

 define lbdtc      / "Date / Time" order order=internal style(column)=[cellwidth=1.2in just=left] style(header)=[just=left];
 define avalc      / "Value" order style(column)=[cellwidth=0.7in just=l] style(header)=[just=l];
  *define chgc      / "Change~from~Baseline" order style(column)=[cellwidth=0.7in just=l] style(header)=[just=l];
 define anrind     / "Flag" order style(column)=[cellwidth=0.6in just=left] style(header)=[just=left] ;
 define lbclsig    / "Assessment [1]" order style(column)=[cellwidth=0.95in just=left] style(header)=[just=left];

 break after page   / page;

 compute before page0 ;
 line " ";
 endcomp;

 compute after param0;
 line " ";
 endcomp;


 %if &doit EQ 0 %then %do;
   compute after page/style=[cellwidth=9.7in just=left];
    line "&emp";
   endcomp;
 %end;

run;

%close_rtf;
%arrange_rtf;

%mend print_listings;

%print_listings(program=T14_03_04_0X_LB_ABN, disname=14.3.4.1, idisname=14_3_4_1, ds_list=ADLB, where=%str(LBCLSIG in ("NCS" "TBC" "CS")), bn=ABN, ttt=Abnormal, 
	ftnote=%str([1] NCS:  Not Clinically Significant   /   CS: Clinically Significant), emp=%str(No Abnormal Laboratory Values Were Measured.));
%clrw;

%print_listings(program=T14_03_04_0X_LB_ABN, disname=14.3.4.2, idisname=14_3_4_2, ds_list=ADLB, where=%str(LBCLSIG in ("CS" )), bn=ABN_CS, ttt=%str(Clinically Significant), 
	ftnote=%str([1] CS: Clinically Significant), emp=%str(No Clinically Significant Laboratory Values Were Measured.));
%clrw;



